#pragma once

// 守护进程

#include <iostream>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

void MyDaemon()
{
    // 1、忽略信号,SIGPIPE、SIGCHID等
    signal(SIGPIPE, SIG_IGN);
    signal(SIGCHLD, SIG_IGN);
    // 2、自己不是组长
    if (fork() > 0) // 终止父进程
        exit(0);
    // 3、调用setsid()
    setsid();
    // 4、标准输入，输出，错误重定向,守护进程不能向显示器打印消息
    int dev_null = open("/dev/null", O_RDONLY | O_WRONLY);
    if (dev_null > 0)
    {
        dup2(0, dev_null);
        dup2(1, dev_null);
        dup2(2, dev_null);
        close(dev_null);
    }
}